#!/usr/bin/env python3
"""
AI配置更新工具
允许通过命令行快速切换AI提供商和更新API密钥
"""

import sys
import os
import argparse
from pathlib import Path

# 添加项目根目录到Python路径
project_root = Path(__file__).parent.parent
sys.path.insert(0, str(project_root))

from src.config_manager import config_manager

def list_providers():
    """列出所有可用的AI提供商"""
    config = config_manager.get_config_summary()
    print("当前AI配置:")
    print("=" * 40)
    print(f"激活提供商: {config['active_provider']}")
    print(f"可用提供商: {', '.join(config['available_providers'])}")
    print(f"AI功能: {', '.join(config['functions'])}")
    
    # 显示详细配置
    print("\n详细配置:")
    print("-" * 40)
    for provider, details in config_manager.config.get('providers', {}).items():
        api_key_status = "已设置" if details.get('api_key') and 'your-' not in str(details.get('api_key')) else "未设置"
        print(f"{provider}: {details.get('name', '未知')} - API密钥 {api_key_status}")

def switch_provider(provider_name):
    """切换到指定的AI提供商"""
    providers = config_manager.config.get('providers', {})
    
    if provider_name not in providers:
        print(f"错误: 提供商 '{provider_name}' 不存在")
        print(f"可用提供商: {', '.join(providers.keys())}")
        return False
    
    success = config_manager.set_active_provider(provider_name)
    if success:
        print(f"成功切换到 {provider_name} 提供商")
        return True
    else:
        print(f"切换到 {provider_name} 提供商失败")
        return False

def update_api_key(provider, api_key):
    """更新指定提供商的API密钥"""
    success = config_manager.update_provider_config(provider, {'api_key': api_key})
    if success:
        print(f"成功更新 {provider} 的API密钥")
        return True
    else:
        print(f"更新 {provider} 的API密钥失败")
        return False

def add_provider(name, base_url, api_key, models=None):
    """添加新的AI提供商"""
    if models is None:
        models = {
            'chat': 'default',
            'analysis': 'default',
            'forecast': 'default'
        }
    
    provider_config = {
        'name': name,
        'base_url': base_url,
        'api_key': api_key,
        'models': models,
        'max_tokens': 2000,
        'temperature': 0.7,
        'timeout': 30
    }
    
    success = config_manager.add_provider(name.lower(), provider_config)
    if success:
        print(f"成功添加提供商: {name}")
        return True
    else:
        print(f"添加提供商失败: {name}")
        return False

def validate_config():
    """验证当前配置"""
    validation = config_manager.validate_config()
    
    if validation['valid']:
        print("✅ 配置验证通过")
    else:
        print("❌ 配置验证失败")
        for error in validation['errors']:
            print(f"  错误: {error}")
    
    if validation['warnings']:
        print("⚠️  配置警告:")
        for warning in validation['warnings']:
            print(f"  警告: {warning}")

def export_config(output_file):
    """导出当前配置"""
    success = config_manager.export_config(output_file)
    if success:
        print(f"配置已导出到: {output_file}")
    else:
        print(f"导出配置失败")

def import_config(input_file):
    """从文件导入配置"""
    if not os.path.exists(input_file):
        print(f"错误: 文件 {input_file} 不存在")
        return False
    
    success = config_manager.import_config(input_file)
    if success:
        print(f"配置已从 {input_file} 导入")
    else:
        print(f"导入配置失败")

def interactive_mode():
    """交互式配置模式"""
    print("AI配置交互式更新工具")
    print("=" * 50)
    
    while True:
        print("\n选项:")
        print("1. 查看当前配置")
        print("2. 切换AI提供商")
        print("3. 更新API密钥")
        print("4. 添加新提供商")
        print("5. 验证配置")
        print("6. 导出配置")
        print("7. 退出")
        
        choice = input("\n请选择操作 (1-7): ").strip()
        
        if choice == '1':
            list_providers()
            
        elif choice == '2':
            providers = config_manager.config.get('providers', {})
            print(f"\n可用提供商: {', '.join(providers.keys())}")
            provider = input("输入要切换的提供商: ").strip()
            switch_provider(provider)
            
        elif choice == '3':
            providers = config_manager.config.get('providers', {})
            print(f"\n可用提供商: {', '.join(providers.keys())}")
            provider = input("输入要更新密钥的提供商: ").strip()
            if provider in providers:
                api_key = input("输入新的API密钥: ").strip()
                update_api_key(provider, api_key)
            else:
                print("无效的提供商")
                
        elif choice == '4':
            name = input("提供商名称: ").strip()
            base_url = input("API基础URL: ").strip()
            api_key = input("API密钥: ").strip()
            add_provider(name, base_url, api_key)
            
        elif choice == '5':
            validate_config()
            
        elif choice == '6':
            filename = input("导出文件名: ").strip()
            export_config(filename)
            
        elif choice == '7':
            print("退出配置工具")
            break
            
        else:
            print("无效的选择，请重试")

def main():
    parser = argparse.ArgumentParser(description='AI配置更新工具')
    parser.add_argument('--list', action='store_true', help='列出所有提供商')
    parser.add_argument('--switch', help='切换到指定提供商')
    parser.add_argument('--api-key', nargs=2, metavar=('PROVIDER', 'KEY'), help='更新API密钥')
    parser.add_argument('--add', nargs=3, metavar=('NAME', 'URL', 'KEY'), help='添加新提供商')
    parser.add_argument('--validate', action='store_true', help='验证配置')
    parser.add_argument('--export', help='导出配置到文件')
    parser.add_argument('--import', dest='import_file', help='从文件导入配置')
    parser.add_argument('--interactive', action='store_true', help='交互式模式')
    
    args = parser.parse_args()
    
    if not any(vars(args).values()):
        args.interactive = True
    
    try:
        if args.list:
            list_providers()
        elif args.switch:
            switch_provider(args.switch)
        elif args.api_key:
            provider, key = args.api_key
            update_api_key(provider, key)
        elif args.add:
            name, url, key = args.add
            add_provider(name, url, key)
        elif args.validate:
            validate_config()
        elif args.export:
            export_config(args.export)
        elif args.import_file:
            import_config(args.import_file)
        elif args.interactive:
            interactive_mode()
    except KeyboardInterrupt:
        print("\n操作已取消")
        sys.exit(0)
    except Exception as e:
        print(f"错误: {e}")
        sys.exit(1)

if __name__ == "__main__":
    main()